package cn.marinda.totipotentwar.utils;

import cn.marinda.totipotentwar.TotipotentWar;
import cn.marinda.totipotentwar.global.ConfigData;
import cn.marinda.totipotentwar.global.GameData;
import cn.marinda.totipotentwar.manager.GameDataManager;
import org.bukkit.Location;
import org.bukkit.entity.Player;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 游戏工具类
 *
 * @author hwj
 * @date 2022/02/05
 */
public class GameUtil {

    /**
     * 是否被开启了。
     */
    public static boolean enableFlag = false;

    /**
     * 开始游戏标志
     */
    public static boolean startFlag = false;

    /**
     * 玩家游戏
     */
    public static Set<Player> playerGame = new HashSet<>();

    /**
     * 玩家默认位置地图
     */
    public static Map<Player, Location> playerDefaultLocationMap = new HashMap<>();
    /**
     * 在加入游戏玩家
     */
    public static int onJoinGamePlayer;

    /**
     * 延迟标志
     */
    public static boolean delayFlag = false;

    /**
     *  延迟时长数
     */

    public static int delaySecond = 0;
    /**
     * 在游戏的波尔
     * 是否满足开启游戏得基本条件
     *
     * @param configData 配置数据
     * @return boolean
     */
    public static boolean onGameBol(ConfigData configData){
        boolean flag = false;
        int limitMinPlayers = configData.getMinPlayer();
        int limitMaxPlayers = configData.getMaxPlayer();

        //基础人数限制，游戏持续时间交给Runnable控制。
        if(onJoinGamePlayer >=limitMinPlayers && onJoinGamePlayer<=limitMaxPlayers){
            flag = true;
        }

        return  flag;
    }

    /**
     * 包含玩家游戏
     *
     *
     * @param player 球员
     * @return boolean
     */
    public static boolean containsPlayerGame(Player player){
        for(Player players : playerGame){
            if(players.equals(players)){
                return true;
            }
        }
        return false;
    }


    /**
     * 在加入游戏
     *
     * @return boolean
     */
    public static void onJoinGame(Player player){
        //添加前检查一下是否游戏开启
        boolean flag = enableFlag && !GameUtil.startFlag;
        boolean result = flag ? true : false;
        if(result){
            if(!containsPlayerGame(player)){
                    //添加基础信息
                    GameUtil.playerGame.add(player);

                    //人数+1
                    GameUtil.onJoinGamePlayer += 1;
            }
            //储存一下基础位置。
            if(!playerDefaultLocationMap.containsKey(player)){
                playerDefaultLocationMap.put(player,player.getLocation());
            }
        }
    }

    /**
     * 在离开游戏
     *
     * @param player 球员
     */
    public static void onLeaveGame(Player player){
        //添加前检查一下是否游戏开启
        boolean flag = enableFlag && GameUtil.startFlag;
        boolean result = flag ? true : false;
        if(result){
                if(GameUtil.containsPlayerGame(player)){
                    //添加基础信息
                    GameUtil.playerGame.remove(player);
                    //人数+1
                    GameUtil.onJoinGamePlayer -= 1;

                }
                //储存一下基础位置。
                if(playerDefaultLocationMap.containsKey(player)){
                    //传送回进入游戏之前的位置！。
                    player.teleport(playerDefaultLocationMap.get(player));
                    //删除该数据！
                    playerDefaultLocationMap.remove(player);
                }
            }
        }

    /**
     * 玩家数据
     *
     * @param player 球员
     */
    public static void onGamePlayerData(Player player,GameDataManager gameDataManager){
        //初始化所有用户数据！
        for(Player players : playerGame){
        }
    }
}
